"""第二组      组名：实力组        口号：共同进步，力争上游
创建一个基于文本的课程时间表生成器，允许学生输入一周内的课程名称和时间（按整点计算），
每次运行可以输入一节课的信息，然后将这些信息格式化并保存到文件中，并随时可以格式化并打印出来。

成员：韦景丹，甘振港，肖平湖，牙文彬（组长）
分工及编写函数部分： 甘振港：课程信息输入，def input_course_info():
                 韦景丹：课程信息整合，def merge_course_info(existing_dict, new_dict):
                 肖平湖：读写文件，def duzhuan(file_path, default_content):
                 牙文彬：格式化并打印，def format_and_print(file_path, course_dict)和def group2():

最终实现效果
程序能够通过文本输入收集课程安排。
将这些信息格式化，并保存到一个文本文件中，文件可以重复读取和写入。
每次输入完成程序能够将文件内容格式化为每一行为一个星期的课程信息，课程之间用\t字符分隔，打印到屏幕上。"""

import sys
import os
def input_course_info():
    """
    提示用户输入周几、课程名称和上课时间，并返回一个嵌套字典 {周1: {时间1: 课程1}}
    """
    while True:
        try:
            week = input("请输入周几（例如：星期一）：").strip()
            if week not in ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]:
                print("输入的星期格式不正确，请重新输入。")
                continue
            time = int(input("请输入上课时间（按整点，例如8表示8点）：").strip())
            if not (1 <= time <= 24):
                print("上课时间必须在1到24之间，请重新输入。")
                continue
            name = input("请输入课程名称：").strip()
            return {week: {time: name}}
        except ValueError:
            print("输入的数据格式有误，请重新输入。")
            continue


def merge_course_info(existing_dict, new_dict):
    """
    将新的课程信息与已有的课程信息合并，如果时间冲突则提示并退出。
    """
    for week, courses in new_dict.items():
        if week not in existing_dict:
            existing_dict[week] = courses
        else:
            for time, name in courses.items():
                if time in existing_dict[week]:
                    print(f"时间冲突：{week} {time}点已有{existing_dict[week][time]}课。")
                    sys.exit()
                else:
                    existing_dict[week][time] = name
    return existing_dict


def duzhuan(file_path, default_content):
    """
    读取课程信息文件，如果文件不存在则创建并初始化。
    :param file_path: 课程信息文件路径
    :param default_content: 默认的课程信息字典
    :return: 读取或初始化的课程信息字典
    """
    try:
        with open(file_path, "r", encoding="utf-8") as file:
            content = file.read()
            if content.strip() == "":#如果文件为空，则返回一个空字典
                return {}
            content1 = eval(content)
            return content1
    except FileNotFoundError:
        print(f"文件{file_path}不存在，正在创建新文件...")
        with open(file_path, "w", encoding="utf-8") as file:
            file.write(str(default_content))
        return default_content
    except Exception as e:
        print(f"读取文件时发生错误: {e}")
        sys.exit()


def format_and_print_course(course_dict):
    """
    将课程信息格式化并打印到屏幕上，每行为一个星期的课程信息，课程之间用\t分隔。
    """
    for week, courses in course_dict.items():
        course_in_week = ""
        for time, name in sorted(courses.items()):
            course_in_week += f"{time}点有{name}课\t"
        print(f"{week}：{course_in_week}")

def main():
    filename = "course_schedule.txt"
    course_dict = read_course_file(filename)

    while True:
        # 成员A的功能：输入课程信息
        new_course = input_course_info()

        # 成员B的功能：合并课程信息，处理冲突
        try:
            course_dict = merge_course_info(course_dict, new_course)
        except SystemExit:
            print("课程时间冲突，请检查后重新输入。")
            sys.exit()

        # 成员D的功能：格式化并打印课程表
        format_and_print_course(course_dict)

        # 成员C的功能：写入课程信息到文件


        # 询问是否继续添加课程
        cont = input("是否继续添加课程？(y/n)：").strip().lower()
        if cont != 'y':
            break
    print("课程表已更新并保存。")


if __name__ == "__main__":
    main()